TiDB Cloudで変更データをストリーミングするChangefeedを使って、S3に出力してみた

TiDB Cloudで変更データをストリーミングするChangefeedを使って、S3に出力してみた

Clock Icon2024.09.24

こんにちは、ゲームソリューション部のsoraです。
今回は、TiDB Cloudで変更データをストリーミングするChangefeedを使って、S3に出力してみたことについて書いていきます。

手順は以下を参考に進めていきます。
https://docs.pingcap.com/ja/tidbcloud/changefeed-sink-to-cloud-storage

S3・IAMユーザの作成(AWS)

データの出力先のS3バケットを作成します。
S3バケットについて、この後の工程に作成するTiDB CloudのChangefeedを設定するクラスタと同じリージョンに作成します。
また、Changefeedを使用するためにアクセスキーが必要なため、IAMユーザの作成・アクセスキーの作成をします。

Changefeedの作成(TiDB Cloud)

Dedicatedクラスタの作成

ChangefeedはServerlessクラスタでは使用できない機能であり、Dedicatedクラスタのみ利用可能なため、Dedicatedクラスタを作成します。
リージョンは作成したS3バケットと同じリージョンを指定します。

Changefeedの作成

作成したクラスタのChangefeed>Create Changefeedから作成します。
sr-tidbcloud-changefeed-s3-01

まずレプリケーション先を選択します。
今回はS3にしますが、KafkaやMySQL、TiDB Serverlessなどもあります。
TiDB Serverlessを指定する際は、リージョンの制限があるため注意が必要です。
(今回のバージニア北部では使用できないため、グレーアウトされています。)
https://docs.pingcap.com/tidbcloud/changefeed-sink-to-tidb-cloud
sr-tidbcloud-changefeed-s3-02

次にレプリケーションの設定をします。
今回はテーブルが1つしかないため、テーブルフィルターは設定変更しません。
イベントによってレプリケーション対象外とするフィルタも設定できますが、今回は設定しません。
Start Replication Positionはどの地点からのレプリケーションを取るかの設定で、TSO等も設定できますが現在からとします。
フラッシュパラメータはレプリケーションの間隔と最大のファイルサイズを設定します。
今回はテスト用であり、間隔は初期設定から少し伸ばしています。
sr-tidbcloud-changefeed-s3-03

次にChangefeedに使用するRCUの指定と名前の設定をします。
RCUは最小の2RCUsとしています。
sr-tidbcloud-changefeed-s3-04

最後に設定項目を確認して、Submitボタンで作成できます。
sr-tidbcloud-changefeed-s3-05
sr-tidbcloud-changefeed-s3-06

作成が完了したため、データを1レコード追加してみます。

INSERT INTO prefecture (prefecture, prefectural_capital, area) VALUES
('Toyama', 'Toyama', 'Chubu');

その後、Changefeed作成時に設定したレプリケーション間隔を待ってみると、ステータスがRunningに変わっていることが確認できました。
sr-tidbcloud-changefeed-s3-07
詳細を確認すると、変更したデータがレプリケーションされてそうに見えます。
sr-tidbcloud-changefeed-s3-08

レプリケーション先のS3を確認してみると、更新したデータが出力されていることが確認できました。
sr-tidbcloud-changefeed-s3-09

"I","prefecture","prefecture_db",16,"Toyama","Toyama","Chubu"

ちなみに、S3の中にはテーブルのスキーマ情報もメタデータとして出力されていました。

{
    "Table": "prefecture",
    "Schema": "prefecture_db",
    "Version": 1,
    "TableVersion": 452762721399603207,
    "Query": "",
    "Type": 0,
    "TableColumns": [
        {
            "ColumnName": "id",
            "ColumnType": "INT",
            "ColumnPrecision": "11",
            "ColumnNullable": "false",
            "ColumnIsPk": "true"
        },
        {
            "ColumnName": "prefecture",
            "ColumnType": "VARCHAR",
            "ColumnPrecision": "255",
            "ColumnNullable": "false"
        },
        {
            "ColumnName": "prefectural_capital",
            "ColumnType": "VARCHAR",
            "ColumnPrecision": "255",
            "ColumnNullable": "false"
        },
        {
            "ColumnName": "area",
            "ColumnType": "VARCHAR",
            "ColumnPrecision": "255",
            "ColumnNullable": "false"
        }
    ],
    "TableColumnsTotal": 4
}

最後に

今回は、TiDB Cloudで変更データをストリーミングするChangefeedを使って、S3に出力してみたことを記事にしました。
どなたかの参考になると幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.